﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;                    // テキストファイル読み込み用
using System.DirectoryServices;     // フルネーム取得用
using System.Windows.Forms;
using System.Collections;
using System.Threading;             // .NET3.5マルチスレッド用
using BattleQuiz;


/// <summary>
/// データテーブルの構造体
/// </summary>
struct QTable
{
    public ushort QuizNo;                               // 問題番号
    public sbyte Answer;                                // 正解番号（1～4）
    public string Quiz;                                 // クイズ文
    public string Text1;                                // 解答1
    public string Text2;                                // 解答2
    public string Text3;                                // 解答3
    public string Text4;                                // 解答4
    public string UniqID;                               // ユニークID
    public string DUser;                                // ドメインユーザ名
}


namespace BattleQuiz
{
    public partial class Form1 : Form
    {
        private const Int32 DEF_STS_OK = 0x00;
        private const Int32 DEF_STS_NG = 0x01;
        private const Int32 DEF_STS_END = 0x02;
        private const Int32 DEF_STS_TIMEUP = 0x03;

        public const String PATH_MAIN = @"C:BattleQuiz\";
        public const String PATH_LOG = @"C:BattleQuiz\log\";
        public const String PATH_BMP = @"C:BattleQuiz\bmp\";
        public const String PATH_TXT = @"C:BattleQuiz\Question\test.txt";
        public const String PATH_COPY = @"C:\logCopy\";

        public ushort RandamID;                 /* ランダム変数（暫定） */
        public string dName;
        public string strDateTime = "";
        public System.IO.FileStream hStream;   /* ファイルディスクリプタ */

        const int QUIZ_DISP_THEREAD = 0;
        const int TIMER_THEREAD = 1;
        const int tid = 2;
        Thread[] threads = new Thread[tid];

        QuizManage Quiz;                /* インスタンスを格納するための変数を定義 */
        ushort unIdx;                   /* 問題番号（何問目か数える） */
        ushort unCount;                 /* 処理した問題数 */
        ushort randomNumber;            /* ランダムなもんだい番号 */
        DateTime dtNow;
        ushort point = 0;               /* 正解数 */
        bool gbInputFlg = false;        /* true：解答入力受付中　false：解答入力不可 */

        public Form1()
        {
            try
            {
                /* 現在の日付と時刻を取得する */
                dtNow = DateTime.Now;

                /* ドメイン名取得処理 */
                string machine = Environment.MachineName;
                string user = Environment.UserName;
                string domain = Environment.UserDomainName;
                string path = "WinNT://" + domain + "/" + user;
                using (DirectoryEntry dirEnt = new DirectoryEntry(path))
                {
                    /* フルネーム取得 */
                    dName = dirEnt.Properties["FullName"].Value.ToString();
                }

                /* ファイルオープン */
                /* hStream が破棄されることを保証するために using を使用する */
                /* 指定したパスのファイルを作成する */
                string fileName = PATH_LOG + dName + ".txt";
                if (System.IO.File.Exists(fileName))
                {   /* ファイルが存在する場合 */
                    strDateTime = dtNow.ToString().Replace("/", "");
                    strDateTime = strDateTime.Replace(":", "");
                    strDateTime = strDateTime.Replace(" ", "-");
                    hStream = System.IO.File.Create(PATH_LOG + dName + "_" + strDateTime + ".txt");
                    //using (hStream = System.IO.File.Create(@"C:BattleQuiz\tmp\" + dName + "_" + strDateTime + ".txt"))
                    //{
                    //    /* 作成時に返される FileStream を利用して閉じる */
                    //    //if (hStream != null)
                    //    //{
                    //    //    hStream.Close();
                    //    //}
                    //}
                }
                else
                {   /* ファイルが存在しない場合 */
                    hStream = System.IO.File.Create(fileName);
                    //using (hStream = System.IO.File.Create(fileName))
                    //{
                    //    /* 作成時に返される FileStream を利用して閉じる */
                    //    //if (hStream != null)
                    //    //{
                    //    //    hStream.Close();
                    //    //}
                    //}
                }


            }
            catch (Exception e)
            {
                MessageBox.Show("ネットワークに接続＆サーバーが起動していないとプレイできません。",
                "エラー！",
                MessageBoxButtons.OK,
                MessageBoxIcon.Error);
            }
            /* -<--- */

            InitializeComponent();
            lbl_Player.Text = "プレイヤー：" + dName + " さん";

            // 画像の背景を透明にする（画像内の左下の1ピクセルと同じ色を透明化）
            //((Bitmap)pictureBox1.Image).MakeTransparent();
            //((Bitmap)pictureBox2.Image).MakeTransparent();
            //((Bitmap)pictureBox3.Image).MakeTransparent();

            unIdx = 0;              /* 問題番号 */
            unCount = 0;            /* 処理した問題数 */
            ReadNextQuiz(false);
        }

        /* クイズ番号をインクリメント */
        public System.IO.FileStream GetStreamID()
        {
            return hStream;
        }

        /* クイズ番号をインクリメント */
        public void AddIndex()
        {
            unIdx++;
        }

        /* クイズ番号を設定 */
        public void SetIndex(ushort Idx)
        {
            unIdx = Idx;
        }

        /* 処理した問題数をインクリメント */
        public void AddCount()
        {
            unCount++;
        }

        /* オブジェクトを初期化 */
        public void InitObject(bool bFlg)
        {
            button1.Text = "";
            button2.Text = "";
            button3.Text = "";
            button4.Text = "";
            label5.Text = "";
            lbl_DUser.Text = "問題作成者：";
            if (bFlg)
            {
                pictureBox4.Image = null;
                pictureOK.Hide();
                pictureNG.Hide();
                pictureOK.Refresh();
                pictureNG.Refresh();

                button1.Visible = true;
                button2.Visible = true;
                button3.Visible = true;
                button4.Visible = true;
                btn_End.Visible = true;
                label1.Visible = true;
                label2.Visible = true;
                label3.Visible = true;
                label4.Visible = true;
                lbl_DUser.Visible = true;
            }
            else
            {
                gbInputFlg = false;         /* 入力禁止 */
                pictureOK.Refresh();
                pictureNG.Refresh();

                button1.Visible = false;
                button2.Visible = false;
                button3.Visible = false;
                button4.Visible = false;
                btn_End.Visible = false;
                label1.Visible = false;
                label2.Visible = false;
                label3.Visible = false;
                label4.Visible = false;
                lbl_DUser.Visible = false;
            }
        }

        /* 次の問題を表示する */
        public void ReadNextQuiz(bool bEnd)
        {
            /* 1.0秒間（1000ミリ秒）停止する */
            Thread.Sleep(1000);

            Quiz = new QuizManage();        /* インスタンスを生成 */
            Quiz.ReadText();

            /*** 問題ランダム化 ***/
            if (chk_Random.Checked)
            {
                Random rnd = new Random();
                randomNumber = (ushort)rnd.Next(Quiz.unQuizNum - 1);    /* 0から unQuizNum-1 までの乱数を取得する */
                if (randomNumber == 0)
                {
                    randomNumber++;
                }
                else if (randomNumber == 999)       // @@テストがめんどくさいので1にしておく
                {
                    randomNumber = 1;
                }
                unIdx = randomNumber;
            }
            /*******/

            /* 前の問題のスレッドが残っていれば殺す */
            AbortTask(QUIZ_DISP_THEREAD);
            AbortTask(TIMER_THEREAD);

            /* オブジェクトを初期化 */
            InitObject(true);

            label5.Text = "";
            if (!bEnd)
            {
                button1.Text = Quiz.GetText1(unIdx);
                button2.Text = Quiz.GetText2(unIdx);
                button3.Text = Quiz.GetText3(unIdx);
                button4.Text = Quiz.GetText4(unIdx);
                lbl_DUser.Text = "問題作成者：" + Quiz.GetDUser(unIdx);
            }

            if (!bEnd && (Quiz.GetQuizNo(unIdx) != 999))
            {
                /* 問題文を表示するスレッドを起動 */
                threads[QUIZ_DISP_THEREAD] = new Thread(new ThreadStart(this.QuizDispTask));
                threads[QUIZ_DISP_THEREAD].IsBackground = true;
                threads[QUIZ_DISP_THEREAD].Start();
            }
            else
            {   /* 結果表示 */
                InitObject(false);

                /* 問題文を表示するスレッドを起動 */
                threads[QUIZ_DISP_THEREAD] = new Thread(new ThreadStart(this.KekkaDispTask));
                threads[QUIZ_DISP_THEREAD].IsBackground = true;
                threads[QUIZ_DISP_THEREAD].Start();
            }
        }

        /* 解答1を選択 */
        private void button1_Click(object sender, EventArgs e)
        {
            if (gbInputFlg)
            {
                gbInputFlg = false;         /* 入力禁止 */
                if (Quiz.GetAnswer(unIdx) == 1 || Quiz.GetAnswer(unIdx) == 0)
                {
                    point++;
                    pictureOK.Show();
                    TextWrite.Write2(DEF_STS_OK, Quiz.GetUniqID(unIdx), Quiz.GetQuizNo(unIdx), hStream);
                }
                else
                {
                    pictureNG.Show();
                    TextWrite.Write2(DEF_STS_NG,Quiz.GetUniqID(unIdx), Quiz.GetQuizNo(unIdx), hStream);
                }
                AbortTask(TIMER_THEREAD);
                AddIndex();
                AddCount();
                AbortTask(QUIZ_DISP_THEREAD);
                InitObject(false);
                ReadNextQuiz(false);
            }
        }

        /* 解答2を選択 */
        private void button2_Click(object sender, EventArgs e)
        {
            if (gbInputFlg)
            {
                gbInputFlg = false;         /* 入力禁止 */
                if (Quiz.GetAnswer(unIdx) == 2 || Quiz.GetAnswer(unIdx) == 0)
                {
                    point++;
                    pictureOK.Show();
                    TextWrite.Write2(DEF_STS_OK, Quiz.GetUniqID(unIdx), Quiz.GetQuizNo(unIdx), hStream);
                }
                else
                {
                    pictureNG.Show();
                    TextWrite.Write2(DEF_STS_NG, Quiz.GetUniqID(unIdx), Quiz.GetQuizNo(unIdx), hStream);
                }
                AbortTask(TIMER_THEREAD);
                AddIndex();
                AddCount();
                AbortTask(QUIZ_DISP_THEREAD);
                InitObject(false);
                ReadNextQuiz(false);
            }
        }

        /* 解答3を選択 */
        private void button3_Click(object sender, EventArgs e)
        {
            if (gbInputFlg)
            {
                gbInputFlg = false;         /* 入力禁止 */
                if (Quiz.GetAnswer(unIdx) == 3 || Quiz.GetAnswer(unIdx) == 0)
                {
                    point++;
                    pictureOK.Show();
                    TextWrite.Write2(DEF_STS_OK, Quiz.GetUniqID(unIdx), Quiz.GetQuizNo(unIdx), hStream);
                }
                else
                {
                    pictureNG.Show();
                    TextWrite.Write2(DEF_STS_NG, Quiz.GetUniqID(unIdx), Quiz.GetQuizNo(unIdx), hStream);
                }
                AbortTask(TIMER_THEREAD);
                AddIndex();
                AddCount();
                AbortTask(QUIZ_DISP_THEREAD);
                InitObject(false);
                ReadNextQuiz(false);
            }
        }

        /* 解答4を選択 */
        private void button4_Click(object sender, EventArgs e)
        {
            if (gbInputFlg)
            {
                gbInputFlg = false;         /* 入力禁止 */
                if (Quiz.GetAnswer(unIdx) == 4 || Quiz.GetAnswer(unIdx) == 0)
                {
                    point++;
                    pictureOK.Show();
                    TextWrite.Write2(DEF_STS_OK, Quiz.GetUniqID(unIdx), Quiz.GetQuizNo(unIdx), hStream);
                }
                else
                {
                    pictureNG.Show();
                    TextWrite.Write2(DEF_STS_NG, Quiz.GetUniqID(unIdx), Quiz.GetQuizNo(unIdx), hStream);
                }
                AbortTask(TIMER_THEREAD);
                AddIndex();
                AddCount();
                AbortTask(QUIZ_DISP_THEREAD);
                InitObject(false);
                ReadNextQuiz(false);
            }
        }

        /* 終了＆結果発表ボタン押下 */
        private void btn_End_Click(object sender, EventArgs e)
        {
            gbInputFlg = false;         /* 入力禁止 */
            AbortTask(TIMER_THEREAD);
            AbortTask(QUIZ_DISP_THEREAD);
            InitObject(false);
            ReadNextQuiz(true);
        }

        /* 時間切れ処理 */
        private void TimeOut()
        {
            gbInputFlg = false;         /* 入力禁止 */
            pictureNG.Show();
            TextWrite.Write2(DEF_STS_TIMEUP, Quiz.GetUniqID(unIdx), Quiz.GetQuizNo(unIdx), hStream);
            AbortTask(TIMER_THEREAD);
            AddIndex();
            AddCount();
            AbortTask(QUIZ_DISP_THEREAD);
            InitObject(false);
            ReadNextQuiz(false);
        }

        /* スレッドを強制終了する */
        private void AbortTask(int tid)
        {
            if (threads[tid] != null)
            {
                /* スレッドを中断する */
                threads[tid].Abort();

                /* スレッドが終了するまで待機する */
                threads[tid].Join();
            }
        }


        /********************/
        /* 問題文描画タスク */
        /********************/
        private void QuizDispTask()
        {
            /* 問題文は1文字ずつ表示する */
            for (ushort unLoop = 0; unLoop < Quiz.GetQuiz(unIdx).Length; unLoop++)
            {
                label5.Invoke(new D_UpdLabel5(UpdLabel5), Quiz.GetQuizWord(unIdx, unLoop));

                /* 0.03秒間（30ミリ秒）停止する */
                Thread.Sleep(30);

                if(unLoop == 5){
                    gbInputFlg = true;      /* 入力許可 */
                }
            }

            gbInputFlg = true;              /* 入力許可 */

            /* タイマーを表示するスレッドを起動 */
            threads[TIMER_THEREAD] = new Thread(new ThreadStart(this.TimerTask));
            threads[TIMER_THEREAD].IsBackground = true;
            threads[TIMER_THEREAD].Start();
        }

        private delegate void D_UpdLabel5(char txt);
        private void UpdLabel5(char txt)
        {
            label5.Text += txt;
        }

        private delegate void D_UpdLabel5s(string txt);
        private void UpdLabel5s(string txt)
        {
            label5.Text += txt;
        }

        /******************/
        /* 結果描画タスク */
        /******************/
        private void KekkaDispTask()
        {
            Image img2, img3;
            String[] strPath = new String[10];
            String KekkaTxt = "";
            Double dWariai = 0.0;
            Int16 tmpWariai = 0;

            strPath[0] = PATH_BMP + "Morisaki_00.jpg";
            strPath[1] = PATH_BMP + "Morisaki_01.jpg";

            /* 描画先とするImageオブジェクトを作成する */
            Bitmap bitmap2 = new Bitmap(pictureBox2.Width, pictureBox2.Height);
            Bitmap bitmap3 = new Bitmap(pictureBox3.Width, pictureBox3.Height);

            /**************/
            /* 高得点画像 */  //@@やっつけ実装
            /**************/
            if (point >= 10)
            {
                /* ↓↓↓　ボーナス画像表示　↓↓↓ */
                /* ImageオブジェクトのGraphicsオブジェクトを作成する */
                Graphics g2 = Graphics.FromImage(bitmap2);
                Graphics g3 = Graphics.FromImage(bitmap3);

                /* 画像ファイルを読み込んで、Imageオブジェクトとして取得する */
                img2 = Image.FromFile(@strPath[0]);
                img3 = Image.FromFile(@strPath[1]);

                /* 画像をcanvasの座標(0, 0)の位置に描画する */
                g2.DrawImage(img2, 0, 0, img2.Width, img2.Height);      /* 1/1サイズ */
                g3.DrawImage(img3, 0, 0, img3.Width, img3.Height);      /* 1/1サイズ */

                /* Imageオブジェクトのリソースを解放する */
                img2.Dispose();
                img3.Dispose();

                /* Graphicsオブジェクトのリソースを解放する */
                g2.Dispose();
                g3.Dispose();

                /* PictureBox1に表示する */
                pictureBox2.Image = bitmap2;
                pictureBox3.Image = bitmap3;

                //bitmap.MakeTransparent();
                //((Bitmap)pictureBox2.Image).MakeTransparent();
                //((Bitmap)pictureBox3.Image).MakeTransparent();    // @@エラーになるのでコメントアウト
                /* ↑↑↑　ボーナス画像表示　↑↑↑ */
            }

            /* 得点表示 */
            label5.Invoke(new D_UpdLabel5s(UpdLabel5s), Convert.ToString(dName + "さんの得点は、"));
            Thread.Sleep(500);
            label5.Invoke(new D_UpdLabel5s(UpdLabel5s), Convert.ToString(unCount));
            label5.Invoke(new D_UpdLabel5s(UpdLabel5s), Convert.ToString(" 点満点中 "));
            Thread.Sleep(500);
            label5.Invoke(new D_UpdLabel5s(UpdLabel5s), Convert.ToString(point));
            label5.Invoke(new D_UpdLabel5s(UpdLabel5s), " 点 ");
            Thread.Sleep(500);

            dWariai = (Double)point / (Double)unCount;
            tmpWariai = (short)(dWariai * 10.0);        /* 少数第一位を取得するため整数に変換する */
            switch (tmpWariai)
            {
                case 0:
                case 1:
                case 2:
                    KekkaTxt = "『ファッキンビチグソ野郎』級";
                    break;
                case 3:
                case 4:
                    KekkaTxt = "『ビチグソ野郎』級";
                    break;
                case 5:
                case 6:
                    KekkaTxt = "『ゴミ虫』級";
                    break;
                case 7:
                case 8:
                    KekkaTxt = "『ハートマン軍曹』級";
                    break;
                case 9:
                    KekkaTxt = "『ジャンヌ・ダルク』級";
                    break;
                case 10:
                default:
//                    KekkaTxt = "『森崎　友紀』級";
                    KekkaTxt = "『ゴッド』級";
                    break;
            }

            /* 結果書き込み */
            TextWrite.WriteKekka(KekkaTxt, hStream);

            /* 作成時に返される FileStream を利用して閉じる */
            if (hStream != null)
            {
                hStream.Close();
            }

            // ファイルコピー
            if (strDateTime == "")
            {
                File.Copy(PATH_LOG + dName + ".txt", PATH_COPY + dName + "_" + strDateTime + ".txt", true);
            }
            else
            {
                File.Copy(PATH_LOG + dName + "_" + strDateTime + ".txt", PATH_COPY + dName + "_" + strDateTime + ".txt", true);
            }

            label5.Invoke(new D_UpdLabel5s(UpdLabel5s), KekkaTxt);
            Thread.Sleep(100);
            label5.Invoke(new D_UpdLabel5s(UpdLabel5s), " です。");
            Thread.Sleep(5000);     /* 5秒間停止する */
        }

        /******************/
        /* タイマータスク */
        /******************/
        private void TimerTask()
        {
            Image img;
            String[] strPath = new String[10];

            strPath[0] = PATH_BMP + "0.bmp";
            strPath[1] = PATH_BMP + "1.bmp";
            strPath[2] = PATH_BMP + "2.bmp";
            strPath[3] = PATH_BMP + "3.bmp";
            strPath[4] = PATH_BMP + "4.bmp";
            strPath[5] = PATH_BMP + "5.bmp";
            strPath[6] = PATH_BMP + "6.bmp";
            strPath[7] = PATH_BMP + "7.bmp";
            strPath[8] = PATH_BMP + "8.bmp";
            strPath[9] = PATH_BMP + "9.bmp";

            Thread.Sleep(1000);     /* 1.0秒スリープ */

            /* 描画先とするImageオブジェクトを作成する */
            Bitmap bitmap = new Bitmap(pictureBox4.Width, pictureBox4.Height);

            for (int iLoop = 9; iLoop >= 0; iLoop--)
            {
                /* ImageオブジェクトのGraphicsオブジェクトを作成する */
                Graphics g = Graphics.FromImage(bitmap);

                /* 画像ファイルを読み込んで、Imageオブジェクトとして取得する */
                img = Image.FromFile(@strPath[iLoop]);

                /* 画像をcanvasの座標(0, 0)の位置に描画する */
                g.DrawImage(img, 0, 0, img.Width / 2, img.Height / 2);      /* 1/2サイズ */

                /* Imageオブジェクトのリソースを解放する */
                img.Dispose();

                /* Graphicsオブジェクトのリソースを解放する */
                g.Dispose();

                /* PictureBox1に表示する */
                pictureBox4.Image = bitmap;

                // bitmap.MakeTransparent();
                ((Bitmap)pictureBox4.Image).MakeTransparent();

                Thread.Sleep(1000);     // 1.0秒スリープ
            }

            //TimeOut();      /* 時間切れ処理 */    //@@バグってるのでコメントアウト
        }
    }


    /******************/
    /* 問題制御クラス */
    /******************/
    /* テキストファイルから指定した1行を読み込む */
    public partial class QuizManage
    {
        public const String PATH_TXT = @"C:BattleQuiz\Question\test.txt";

        const int QUIZ_NUM = 100;           /* 問題数の最大値 */
        QTable[] _qTable = new QTable[QUIZ_NUM];
        public ushort unQuizNum = 0;        /* 実際の問題数 */

        /* テキストより全ての行読み込んでその内容をテーブルに保持する */
        public void ReadText()
        {
            string strText = "";
            string[] stArrayData;

            StreamReader sr = new StreamReader(PATH_TXT, Encoding.GetEncoding("SHIFT_JIS"));
            while (sr.EndOfStream == false)
            {
                strText = sr.ReadLine();
                if (!strText.StartsWith("//"))       /* 先頭がコメントだった場合は処理しない */
                {
                    /* カンマ区切りで分割して配列に格納する */
                    stArrayData = strText.Split(',');

                    _qTable[unQuizNum].QuizNo = ushort.Parse(stArrayData[0].Trim());
                    _qTable[unQuizNum].Answer = sbyte.Parse(stArrayData[1].Trim());
                    _qTable[unQuizNum].Quiz = stArrayData[2].Trim();
                    _qTable[unQuizNum].Text1 = stArrayData[3].Trim();
                    _qTable[unQuizNum].Text2 = stArrayData[4].Trim();
                    _qTable[unQuizNum].Text3 = stArrayData[5].Trim();
                    _qTable[unQuizNum].Text4 = stArrayData[6].Trim();
                    _qTable[unQuizNum].UniqID = stArrayData[7].Trim();
                    _qTable[unQuizNum].DUser = stArrayData[8].Trim();

                    unQuizNum++;
                }
            }
            sr.Close();
        }

        /* 問題番号を取得する */
        public ushort GetQuizNo(ushort unIdx)
        {
            return _qTable[unIdx].QuizNo;
        }

        /* 正解を取得する */
        public sbyte GetAnswer(ushort unIdx)
        {
            return _qTable[unIdx].Answer;
        }

        /* 問題文を取得する */
        public String GetQuiz(ushort unIdx)
        {
            return _qTable[unIdx].Quiz;
        }

        /* 問題文から1文字だけ取得する */
        public Char GetQuizWord(ushort unIdx, ushort unOffset)
        {
            return _qTable[unIdx].Quiz[unOffset];
        }

        /* 解答1を取得する */
        public String GetText1(ushort unIdx)
        {
            return _qTable[unIdx].Text1;
        }

        /* 解答2を取得する */
        public String GetText2(ushort unIdx)
        {
            return _qTable[unIdx].Text2;
        }

        /* 解答3を取得する */
        public String GetText3(ushort unIdx)
        {
            return _qTable[unIdx].Text3;
        }

        /* 解答4を取得する */
        public String GetText4(ushort unIdx)
        {
            return _qTable[unIdx].Text4;
        }

        /* ユニークIDを取得する */
        public String GetUniqID(ushort unIdx)
        {
            return _qTable[unIdx].UniqID;
        }

        /* ドメインユーザーを取得する */
        public String GetDUser(ushort unIdx)
        {
            return _qTable[unIdx].DUser;
        }

        public void MsgOK(ushort unIdx)
        {
            MessageBox.Show(_qTable[unIdx].UniqID,
                            "正解！",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
        }

        public void MsgNG(ushort unIdx)
        {
            MessageBox.Show(_qTable[unIdx].DUser,
                            "不正解！",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Error);
        }
    }
}

public static class TextWrite
{
    private const Int32 DEF_STS_OK = 0x00;
    private const Int32 DEF_STS_NG = 0x01;
    private const Int32 DEF_STS_TIMEUP = 0x03;

    /* テキストに書き込む */
    public static bool Write2(int mode, String Sentaku, int QuizNo, FileStream fs)
    {
        bool bResult = true;

        try
        {
            switch (mode)
            {
                case DEF_STS_OK:
                    AddText(fs, "第" + QuizNo + "問：○　選択：" + Sentaku + "\r\n");
                    break;

                case DEF_STS_NG:
                    AddText(fs, "第" + QuizNo + "問：×　選択：" + Sentaku + "\r\n");
                    break;

                case DEF_STS_TIMEUP:
                    AddText(fs, "第" + QuizNo + "問：×　Time Up!!\r\n");
                    break;
            }

            bResult = true;
        }
        catch (Exception e)
        {
            bResult = false;
            if (fs != null)
            {
                fs.Close();
            }
        }

        return bResult;
    }

    /* 結果をテキストに書き込む場合 */
    public static bool WriteKekka(String txt, FileStream fs)
    {
        bool bResult = true;

        try
        {
            AddText(fs, txt + "\r\n");
            bResult = true;
        }
        catch (Exception e)
        {
            bResult = false;
            if (fs != null)
            {
                fs.Close();
            }
        }

        return bResult;
    }

    private static void AddText(FileStream fs, string value)
    {
        byte[] info = new UTF8Encoding(true).GetBytes(value);
        fs.Write(info, 0, info.Length);
    }

}


